With the advent and continued development of the well-known Internet network, and of similar data-packet networks, much attention has been paid to computing machines for receiving, processing, and forwarding data packets. Such machines, known as routers in the art, typically have multiple interfaces for receiving and sending packets, and circuitry at each interface, including typically a processor, for handling and processing packets. The circuitry at the interfaces is implemented on modules known as line cards in the art. In some routers the line cards are interconnected through what is known as the internal fabric, which comprises interconnected fabric cards handling transmissions through the fabric. Fabric interconnection has not always been a part of routers in the art, and is a fairly recent innovation and addition for packet routers.
FIG. 1, labeled prior art, illustrates a number of interconnected fabric nodes, labeled in this example A through J, each node of which may be fairly considered to comprise a fabric card in a switching fabric in a router. It will be apparent to the skilled artisan that FIG. 1 is an exemplary and partial representation of nodes and interconnections in a switching fabric, and that there are typically many more nodes and interconnections than those shown.
One purpose of FIG. 1 in this context is to illustrate that there are a wide variety of alternative paths that data may take within a switching fabric. For example, transmission from node E to node J may proceed either via path E-F-H-G-J, or alternatively via E-F-D-G-J. The skilled artisan will also recognize that the nodes and interconnections shown are but a tiny fraction of the nodes and interconnections that might be extant in a practical system.
In conventional switching fabric at the time of the present patent application fabric nodes in such a structure are implemented on fabric cards or chips that do Flow Control. Such Flow Control is very well-known in the art, and comprises a process of monitoring ports for real or potential traffic overflow, and notifying an upstream port to stop or slow sending of further data. That is, if node G as shown in FIG. 1, becomes overloaded at a particular input port, for example, the port from D, the Flow Control at G will notify D to restrict or suspend traffic to G In this example, D may receive traffic from upstream neighbors that it cannot forward to G, and it may then have to notify these neighbors to suspend sending traffic to D. This example illustrates how Flow Control may cause traffic changes made by nodes as a result of an overflow condition at a downstream node to propagate further upstream affecting further nodes, and further stopping or diverting traffic. In FIG. 1 arrows between nodes are indicative of Flow Control indicators passed, and the skilled artisan will also understand that traffic may be in any direction, and that Flow Control indicators are therefore passed in both directions as well.
A serious problem with Flow Control as conventionally practiced is that the upstream notifications, inherent in flow control, propagate further upstream and hinder or stop traffic that there is no need to stop, partly because the interconnections of nodes may be quite complicated and the alternative paths quite numerous. Further, a node that has been informed of a downstream overload condition cannot select to stop or divert traffic just for that particular link, but only to stop or divert all traffic. These effects, because of the complexity and interconnection of nodes in a fabric, can result in complete stultification of parts of a system, or of an entire network.
There have been in the art several attempts to improve upon flow control, but all such solutions have only been partly successful, and still use upstream propagation of control indicators, which always still have a good chance of causing unwanted difficulty.
What is clearly needed is a way to deal with temporary overloads at fabric nodes without resorting to problematic upstream messaging without impacting traffic that does not need to use the overloaded link.